Uruchomienie filmu
Kategoria:Skrypty W poprzednim rozdziale stworzyliśmy prosty film. Jednak film ten nigdy nie został wyświetlony. I właśnie to zaraz zmienimy. W celu uruchomienia filmu posłużymy się wyzwalaczem (ang. trigger) i skryptem, który zostanie uruchomiony w momencie, gdy Geralt, czyli gracz, wejdzie w wyzwalacz, natomiast skrypt będzie uruchamiał film. Ponieważ chcemy, aby film był wyświetlony tylko raz, skrypt dodatkowo będzie wyłączał wyzwalacz. Pierwsze, co musimy dodać, to oczywiście wyzwalacz (ang. trigger). Mam nadzieje, że pamiętacie jak się dodaje wyzwalacze. Umieszczamy wyzwalacz tak, aby punkt startowy (ang. start point) znajdował się w obszarze wyzwalacza: Dla przypomnienia punkt startowy znajduje się na pierwszym obszarze, jaki stworzyliśmy tj. g31_jaskinia, dlatego też wyzwalacz dodajemy na tym obszarze. Klikamy teraz dwukrotnie na wyzwalaczu. Najlepiej to zrobić w oknie eksploratora modułu: Z prawej strony ekranu otworzy się okno właściwości (ang. properties) wyzwalacza z atrybutami: W atrybucie Tag ''w grupie ''General ''wpisujemy ''trigg_movie: Upewniamy się, że atrybut Enabled ''w grupie ''Attributes ''ustawiony jest na ''True: '' Oznacza to, że wyzwalacz jest włączony. Przyjrzyjmy się teraz grupie ''Scripts. Znajduje się tam atrybut On Enter. Skrypt przypisany do tego atrybutu zostanie uruchomiony w momencie, gdy w wyzwalacz wejdzie jakaś postać, może to być zarówno postać niezależna, potwór, ale także Geralt, czyli gracz. To właśnie w tym atrybucie przypiszemy skrypt uruchamiający film. Ponieważ punkt startowy (ang. start point) znajduje się w obszarze wyzwalacza, oznacza to, że zaraz po uruchomieniu modułu zostanie wyświetlony film. Stanie się tak dlatego, że Geralt, czyli gracz, wszedł w wyzwalacz. Teraz zostanie wyjaśnione w jaki sposób można uruchomić edytor skryptów inaczej niż za pomocą menu File. W atrybucie On Enter ''wpisujemy ''uruchom_film. Ponieważ tak naprawdę jest to nazwa pliku, proszę pamiętać, aby nie była dłuższa niż 16 znaków. Aby wprowadzić nazwę pliku klikamy w prawej kolumnie obok atrybutu On Enter, wpisujemy tekst i naciskamy ENTER: Teraz klikamy w małą czerwoną ikonę znajdującą się w prawej kolumnie: Otworzy się okno edytora skryptów: Zwróćcie uwagę, że skrypt został automatycznie nazwany tak, jak to ustawiliśmy w atrybucie On Enter. Ten sposób uruchomienia edytora skryptów jest trochę lepszy niż ten za pomocą menu File, ponieważ w tym przypadku większość rzeczy jest już zrobiona tzn. skrypt posiada nazwę, jest przypisany do atrybutu itp. Czas napisać nasz pierwszy skrypt. Widać, że w każdym skrypcie znajduje się domyślnie bezargumentowa pusta (ang. void) funkcja main(). To właśnie w ciele tej funkcji tj. między nawiasami { } piszemy treść skryptu. Najpierw napiszemy komentarz, aby każdy wiedział, co to za skrypt. Wpisujemy tekst: Wszystko to, co napiszemy między /* */ jest traktowane jako komentarz, czyli omijane przez kompilator. Komentarz to dodatkowa informacja umieszczona w skrypcie, której zadaniem jest ułatwienie zrozumienia skryptu. Jak widać komentarz taki może być rozłożony na kilka linii. Innym rodzajem komentarza jest zastosowanie znaków //. Poniżej pierwszego komentarza wpisujemy: Ten rodzaj skryptów to tzw. komentarz jednoliniowy. Jak sama nazwa wskazuje może być umieszczony tylko w jednej linii. Jeżeli chcielibyśmy dodać kolejny komentarz tego typu w następnej linii, musielibyśmy zacząć pisanie od //. Czas na pierwszą funkcję. Pod drugim komentarzem wpisujemy: Zwróćcie uwagę, że po wpisaniu słowa Play pojawiło się okno. To okno zawiera podpowiedzi z listą funkcji, jakich możemy użyć. Jak widać w oknie znajduje się 6 funkcji zaczynających się od słowa Play. W oknie poruszamy się klawiszami kursora ? ?. Po wybraniu funkcji naciskamy klawisz TAB lub ENTER. Oczywiście możemy kontynuować ręczne wpisywanie funkcji. Ponieważ chcemy uruchomić film wybieramy funkcję PlayCutscene. Po wpisaniu PlayCutscene otwieramy nawias okrągły (. Zwróćcie uwagę, że pojawiło się kolejne okno. Tym razem jest to podpowiedź odnośnie składni funkcji. Zgodnie z podpowiedzią musimy podać teraz nazwę filmu. Jest to oczywiście nazwa pliku z filmem, ale bez rozszerzenia .cut. Kolejnym argumentem funkcji PlayCutscene jest nazwa skryptu, który zostanie uruchomiony na koniec odtwarzania filmu. Taki skrypt jest nam niepotrzebny, więc pozostawimy puste znaki „”. Interesuje nas 3 argument tej funkcji. Argument ten to tryb wyświetlania filmu. Jeżeli będzie miał wartość 1 (prawda, ang. true), to podczas wyświetlania filmu nie zostaną wyświetlone postaci z gry itp., natomiast, gdy będzie miał wartość 0 (fałsz, ang. false) to na filmie zostaną wyświetlone postacie z gry, a nawet Geralt. I o to nam chodzi. Podczas ruchu naszych kamer będziemy mogli zobaczyć Józka, Zygfryda i Geralta (pod warunkiem, że widok kamery ustawiliście w pobliżu punktów odradzania tych postaci). Cała linia powinna wyglądać tak: Proszę pamiętać o znaku średnika ; po każdej linii skryptu. Funkcja PlayCutscene uruchamia wyświetlanie filmu o podanej nazwie. Pozostaje nam jeszcze wyłączenie wyzwalacza. Zanim go jednak wyłączymy, dodamy kolejny komentarz: Teraz wpisujemy kolejną funkcję. Wpisujemy słowo: Jak widzimy dostępnych jest kilka funkcji zaczynających się od słowa Enable. Zaraz, mieliśmy wyłączyć skrypt, czyli funkcja powinna zaczynać się od słowa Disable, ponieważ Enable włącza. Funkcja, której potrzebujemy, to funkcja EnableTrigger. Wpisujemy tę funkcję i otwieramy nawias okrągły (: Jak wynika z podpowiedzi, pierwszym argumentem funkcji EnableTrigger jest obiekt wyzwalacza. Najpierw musimy pobrać wyzwalacz. Można to zrobić na dwa sposoby. Pierwszym jest dodanie linii z następującym skryptem: object oTrigger = GetObjectByTag(„trigg_movie”); Object to słowo kluczowe, które określa, że będziemy pobierać obiekt, oTrigger to po prostu dowolna nazwa, do której będzie przypisany obiekt. Funkcja GetObjectByTag pobiera obiekt za pomocą jego tagu (identyfikatora). Często wspominałem, że tag wykorzystuje się przy skryptowaniu. To właśnie za pomocą funkcji GetObjectByTag możemy pobrać obiekt za pomocą tagu. Argumentem funkcji GetObjectByTag jest właśnie tag obiektu. W tym przypadku chcemy pobrać obiekt wyzwalacza a jak pamiętamy wyzwalaczowi uruchamiający film nadaliśmy tag trigg_movie. Teraz wystarczyłoby wpisać: EnableTrigger(oTrigger Jest jednak łatwiejszy sposób – słowo kluczowe OBJECT_SELF. Słowa kluczowe zaznaczane są w edytorze skryptów na niebiesko. OBJECT_SELF określa obiekt na rzecz, którego został on wywołany. Ponieważ skrypt jest przypisany do wyzwalacza trigg_movie ''to użycie OBJECT_SELF będzie dotyczyło właśnie wyzwalacza ''trigg_movie. Nie musimy wtedy pisać linii object oTrigger... Tak powinien wyglądać obecnie nasz skrypt: Funkcja EnableTrigger włącza lub wyłącza wyzwalacz. Drugi argument tej funkcji może przybrać wartość TRUE, co równa się z włączeniem wyzwalacza lub FALSE, co oznacza wyłącznie wyzwalacza. Wpisujemy po przecinku słowo FALSE i zamykamy nawias okrągły ): Na koniec linii stawiamy średnik ; Proszę o tym pamiętać. I tak naprawdę to wszystko. Nasz skrypt jest gotowy i na pewno działa. Musimy teraz go zapisać. Z menu File ''wybieramy ''Save uruchom_film.nss: Jeżeli nie ma Save uruchom_film.nss ''lub widnieje tam inna nazwa pliku oznacza to, że okno ''uruchom_film.nss ''nie jest aktywne. Aby je uaktywnić wystarczy kliknąć w nazwę okna ''uruchom_film.nss ''i ponownie z menu ''File ''wybrać ''Save uruchom_film.nss. Otworzy się okno Save File: W oknie tym możemy zdecydować, czy zapisywany plik będzie plikiem globalnym, tzn. takim, który będzie dostępny dla innych modułów. W takim przypadku klikamy w przycisk Global. Możemy plik zapisać bezpośrednio do modułu, co oznacza, że będzie on dostępny tylko dla danego modułu. Drugi sposób jest dobry szczególnie wtedy, gdy zamierzamy nasz moduł umieścić w Internecie, ponieważ wszystkie pliki zapisane są w jednym pliku z modułem (format .adv). Jeżeli chcemy zapisać plik do modułu, klikamy w przycisk Module. Jeżeli klikniemy w przycisk Global, otworzy się standardowe okno systemu Windows służące do zapisywania plików. Przechodzimy do folderu \Data\Scripts\ (w tym folderze zapisane są wszystkie skrypty), wpisujemy nazwę i klikamy w przycisk Zapisz. Oczywiście później taki plik możemy dodać do modułu. Po co jednak utrudniać sobie pracę. Klikamy w przycisk Module. Otworzy się okno Enter name. Musimy tu podać nazwę skryptu. Najlepiej niech to będzie taka sama nazwa skryptu, pod jaką planowaliśmy go zapisać, czyli uruchom_film. Wpisujemy taką nazwę w oknie Enter name: Potem klikamy w przycisk OK. Skrypt zostanie skompilowany, a także pojawi się w oknie eksploratora modułu (ang. module explorer) w podgałęzi Neverwinter scripts sources: Ponieważ skrypt był kompilowany, warto zajrzeć do okna rejestru zdarzeń tzn. do okna Aurora log: Jeżeli podczas kompilacji wystąpi jakiś błąd, zostanie to zasygnalizowane kolorem czerwonym. Jak widać powyżej, przy pierwszej kompilacji wystąpił taki błąd: NWNScript Compiler: \...\ uruchom_film.nss did not Compie successfully Oznacza to, że skrypt uruchom_film.nss ''nie został skompilowany poprawie. W następnej linii opisany jest błąd: NWNScript Compiler: uruchom_film.nss(10): ERROR: UNDEFINED IDENTIFER (PlayCuscene) Po nazwie skryptu, w nawiasach okrągłych () podany jest nr linii, w której wystąpił błąd. W tym przypadku była to linia nr 10. Dalej opisany jest rodzaj błędu – UNDEFINED IDENTIFER, co oznacza nieokreślony identyfikator. Dalej w nawiasie okrągłym () podane jest, co to za identyfikator. Zgadza się, nie ma przecież funkcji PlayCuscene, jest PlayCutscene. Oczywiście poprawiono błąd i ponownie skompilowano skrypt: NWNScript Compiler: \...\uruchom_film compiled successfully Oznacza to, że skrypt został skompilowany poprawnie. Na koniec musimy zapisać cały moduł. W tym celu z menu ''Module wybieramy Save Module: I to wszystko. Stworzyliśmy nasz pierwszy skrypt. Nie jest on zbyt skomplikowany, ale na początek wystarczy.